
#include "nane/core/crt/Time.h"
#include <cassert>
#include <ctime>

namespace nane
{
    ////////////////////////////////////////////////////////////////////////////
    template<>
    ITimeSystem* Holder<ITimeSystem>::s_instance = NULL;
//    ////////////////////////////////////////////////////////////////////////////
//    bool Time::initialize()
//    {
//        assert( m_context );
//        assert( m_context->timeSystem == NULL );
//        nane::m_context->timeSystem = new Implementation();
//        if( nane::m_context->timeSystem->initialize() == false )
//        {
//            shutdown();
//        }
//        return nane::m_context->timeSystem != NULL;
//    }
//    ////////////////////////////////////////////////////////////////////////////
//    void Time::shutdown()
//    {
//        if( nane::m_context->timeSystem != NULL )
//        {
//            nane::m_context->timeSystem->shutdown();
//        }
//        delete static_cast<Implementation*>(nane::m_context->timeSystem);
//        nane::m_context->timeSystem = NULL;
//        Holder<ITimeSystem>::clear();
//    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    StackString<16> Time::GetLocalDate()
    {
        StackString<16> dateStr;
        std::time_t rawtime;
        struct std::tm* timeinfo;
        std::time(&rawtime);
        timeinfo = std::localtime(&rawtime);
        dateStr.format("%02d.%02d.%d", timeinfo->tm_mday, timeinfo->tm_mon+1, timeinfo->tm_year+1900);
        return dateStr;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    StackString<16> Time::GetLocalTime()
    {
        StackString<16> timeStr;
        std::time_t rawtime;
        struct std::tm* timeinfo;
        std::time(&rawtime);
        timeinfo = std::localtime(&rawtime);
        timeStr.format("%02d:%02d:%02d", timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
        return timeStr;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
}   // namespace nane
